<?php

class Utils {
	private static $xml;
	
	public static function dataDump($type, $output) {
		if ($type == "json") {
			return self::JSONIndent(json_encode($output));
		} else if ($type == "xml") {
			return self::toXML($output);
		} else if ($type == "soap") {
			return self::toSOAP($output);
		}
	}
	
	private static function toSOAP($output) {
		return $output;
	}
	
	private static function toXML($array) {
		if(is_array($array) && count($array) > 0) {
			/*
			$header = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><root>";
			$footer = "</root>";
        
			echo $header;
			echo $this->xml;
			echo $footer; 
			*/
			self::$xml  = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><root>";
            self::structXML($array);
			self::$xml .= "</root>";
			
			echo self::$xml;
			
        } else {
            return "no data";
        } 
	}
	
	private static function structXML($array) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                $tag = preg_replace("/^[0-9]{1,}/", "data", $k); // replace numeric key in array to 'data'
				
                self::$xml .= "<".$tag.">";
                self::structXML($v);
                self::$xml .= "</".$tag.">";
            } else {
                $tag = ereg_replace("^[0-9]{1,}", "data", $k); // replace numeric key in array to 'data'
                self::$xml .= "<".$tag.">".$v."</".$tag.">";
            }
        }
    } 
	
	private static function JSONIndent($json) {
		$result      = '';
		$pos         = 0;
		$strLen      = strlen($json);
		$indentStr   = '  ';
		$newLine     = "\n";
		$prevChar    = '';
		$outOfQuotes = true;

		for ($i=0; $i<=$strLen; $i++) {

			// Grab the next character in the string.
			$char = substr($json, $i, 1);

			// Are we inside a quoted string?
			if ($char == '"' && $prevChar != '\\') {
				$outOfQuotes = !$outOfQuotes;
				// If this character is the end of an element, 
				// output a new line and indent the next line.
				} else if(($char == '}' || $char == ']') && $outOfQuotes) {
					$result .= $newLine;
					$pos --;
					for ($j=0; $j<$pos; $j++) {
						$result .= $indentStr;
					}
				}
				// Add the character to the result string.
				$result .= $char;
				// If the last character was the beginning of an element,
				// output a new line and indent the next line.
				if (($char == ',' || $char == '{' || $char == '[') && $outOfQuotes) {
					$result .= $newLine;
					if ($char == '{' || $char == '[') {
						$pos ++;
					}
					
					for ($j = 0; $j < $pos; $j++) {
						$result .= $indentStr;
					}
				}
			$prevChar = $char;
		}
		return $result;
	}
}
?>
